// pages/questionnaire/questionnaire.js
const app = getApp()
const { request } = require("../../utils/request")

Page({
  data: {
    companyList: [], // 公司列表
    adminList: [], // 管理员列表
    formData: {
      name: "",
      phone: "",
      idCard: "",
      password: "",
      companyId: null,
      adminId: null,
    },
    selectedCompanyName: "", // 选中的公司名称
    selectedAdminName: "", // 选中的管理员名称
  },

  onLoad() {
    // 页面加载时获取公司列表
    this.loadCompanyList()
  },

  // 加载公司列表
  loadCompanyList() {
    request({
      url: `${app.globalData.baseUrl}/searchCompany`,
      method: "GET",
    })
      .then((res) => {
        console.log("公司列表:", res)
        if (res.statusCode === 200 && res.data.code === 1) {
          this.setData({
            companyList: res.data.data || [],
          })
        } else {
          wx.showToast({ title: "获取公司列表失败", icon: "none" })
        }
      })
      .catch((err) => {
        console.error("请求失败:", err)
        wx.showToast({ title: "获取公司列表失败", icon: "none" })
      })
  },

  // 加载管理员列表
  loadAdminList(companyId) {
    if (!companyId) {
      this.setData({
        adminList: [],
      })
      return
    }

    request({
      url: `${app.globalData.baseUrl}/searchAdmin`,
      method: "GET",
      data: { companyId: companyId },
    })
      .then((res) => {
        console.log("管理员列表:", res)
        if (res.statusCode === 200 && res.data.code === 1) {
          this.setData({
            adminList: res.data.data || [],
            selectedAdminName: "", // 重置选中的管理员名称
            "formData.adminId": null, // 重置管理员ID
          })
        } else {
          wx.showToast({ title: "获取管理员列表失败", icon: "none" })
        }
      })
      .catch((err) => {
        console.error("请求失败:", err)
        wx.showToast({ title: "获取管理员列表失败", icon: "none" })
      })
  },

  // 公司选择变更处理
  onCompanyChange(e) {
    const index = e.detail.value
    const selectedCompany = this.data.companyList[index]

    this.setData({
      "formData.companyId": selectedCompany.id,
      selectedCompanyName: selectedCompany.name,
    })

    // 加载该公司的管理员列表
    this.loadAdminList(selectedCompany.id)
  },

  // 管理员选择变更处理
  onAdminChange(e) {
    const index = e.detail.value
    const selectedAdmin = this.data.adminList[index]

    this.setData({
      "formData.adminId": selectedAdmin.id,
      selectedAdminName: selectedAdmin.name,
    })
  },

  formSubmit: function (e) {
    // 合并表单数据和已选择的公司ID、管理员ID
    const formInputs = e.detail.value
    const submitData = {
      ...formInputs,
      companyId: this.data.formData.companyId,
      adminId: this.data.formData.adminId,
    }

    if (!submitData.name) {
      wx.showToast({ title: "请输入姓名", icon: "none" })
      return
    }
    if (!isValidPhoneNumber(submitData.phone)) {
      wx.showToast({ title: "请输入有效电话号码", icon: "none" })
      return
    }
    if (!isValidIDCard(submitData.idCard)) {
      wx.showToast({ title: "请输入有效身份证", icon: "none" })
      return
    }
    if (!submitData.password) {
      wx.showToast({ title: "请输入密码", icon: "none" })
      return
    }
    if (!submitData.companyId) {
      wx.showToast({ title: "请选择所属公司", icon: "none" })
      return
    }
    if (!submitData.adminId) {
      wx.showToast({ title: "请选择管理员", icon: "none" })
      return
    }

    request({
      url: `${app.globalData.baseUrl}/questionnaire`,
      method: "POST",
      data: submitData,
    })
      .then((res) => {
        if (res.data.code == 0) {
          wx.showToast({ title: res.data.msg })
        }
        if (res.data.code == 1) {
          wx.showToast({ title: "提交成功" })
          wx.navigateTo({
            url: "/pages/login/login",
            success: () => {
              console.log("跳转成功")
            },
            fail: (err) => {
              console.error("跳转失败:", err)
            },
          })
        }
      })
      .catch(() => {
        wx.showToast({ title: "提交失败", icon: "none" })
      })
  },
})

function isValidPhoneNumber(phone) {
  const regex = /^1[3-9]\d{9}$/
  return regex.test(phone)
}

function isValidIDCard(idCard) {
  // 1. 验证长度和格式
  const regex = /^(?:\d{15}|\d{17}[\dX])$/
  if (!regex.test(idCard)) {
    return false
  }

  // 2. 如果是18位，需进一步校验
  if (idCard.length === 18) {
    // 身份证前17位数字
    const weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    const code = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]

    let sum = 0
    for (let i = 0; i < 17; i++) {
      sum += idCard[i] * weight[i]
    }

    const checkDigit = code[sum % 11] // 计算出的校验位
    return checkDigit === idCard[17].toUpperCase() // 比较校验位
  }

  return true // 15 位身份证合法
}
